100 ! 'THE CAVERN'
110 !
120 ! by Alwin Ertl
130 !    Mais 66
140 !    8497 Neukirchen
150 !    09947 / 468
160 !
170 CALL TITLE :: CALL CLEAR :: CALL SCREEN(2) :: RANDOMIZE :: OPTION BASE 1 :: DIM PT(5),S(3),S0(3),D(3),M(4)
180 CALL CHAR(88,"3C42A599DB663C18183C7E18181818183C4291919189423C",143,"81FFDBFFBDC3FF7E")
190 FOR I=0 TO 8 :: CALL COLOR(I,16,1) :: NEXT I
200 CALL HCHAR(1,1,32,768) :: CALL CHAR(96,"FFFF000000000000000000000000010101030306060C0C181818183030606")
210 CALL CHAR(100,"FFFF0C0C0C18183030606060C0C080808")
220 CALL CHAR(103,"030303060606060C0C0C0C18181830303F3F60606060C0C0C0C0C0808080808")
230 CALL CHAR(107,"03030303060606060C0C0C0C0C181818F8F83030303060606060C0C0C080808")
240 CALL CHAR(111,"01010101030303030606060C0C0C0C1F1F18183030306060606060C0C0C0FFFF")
250 CALL CHAR(115,"FFFF808",116,RPT$("0",14)&"FFFF",118,"000000000000FFFF",128,"18183C7EFFFFFF7E")
260 CALL COLOR(9,10,1,10,10,1,11,10,1,12,4,4,13,8,1) :: FOR I=0 TO 8 :: CALL COLOR(I,16,1) :: NEXT I
270 RESTORE 1950 :: FOR I=6 TO 10 :: READ A$ :: DISPLAY AT(I,6):A$ :: NEXT I
280 DISPLAY AT(1,1):"`d` g k os`":" e  h l pt":"bf  i`m qu":"c   j n rv" :: A$=CHR$(128) :: B$=" "
290 DISPLAY AT(11,7):A$;A$;B$;A$;B$;A$;B$;B$;A$;B$;B$;A$;A$;A$;B$;A$;B$;A$;B$;A$;B$;A$
300 DISPLAY AT(15,1):">>> WIEVIELE MITSPIELER? ..5" :: DISPLAY AT(19,1):">>> WELCHES STARTTEMPO ? ..6" :: ON WARNING NEXT
310 ACCEPT AT(17,13)SIZE(1)VALIDATE("12345")BEEP :NP :: GOTO 330
320 GOTO 310
330 ACCEPT AT(21,13)SIZE(1)VALIDATE("123456")BEEP :LEV :: LS=LEV :: GOTO 350
340 GOTO 330
350 ON WARNING STOP
360 FOR I=1 TO NP :: LEV=LS :: PT(I)=0 :: Z=0 :: TI=800 :: CALL HCHAR(1,1,32,768)
370 Z=Z+1 :: IF Z>3 THEN Z=1 :: LEV=LEV+1 :: IF LEV>6 THEN LEV=6
380 FOR J=2 TO 24 :: DISPLAY AT(J,1): :: NEXT J :: ON Z GOSUB 740,840,940 :: ON ERROR 720
390 CALL JOY(1,JX,JY) :: IF JX OR JY THEN CALL MOTION(#1,-JY/2,JX/2)
400 CALL COINC(ALL ,C) :: IF C THEN 470
410 CALL POSITION(#1,SX,SY) :: CALL GCHAR((SX+7)/8,(SY+7)/8,P) :: IF P=136 THEN 480
420 IF P-32 THEN 530
430 TI=TI-1 :: IF TI<0 THEN 540
440 IF HS<PT(I)THEN HS=PT(I)
450 ON Z GOSUB 1060,1160,1190
460 DISPLAY AT(1,1):USING "X ####  Y ####  Z ###   # UP":PT(I),HS,TI,I :: GOTO 390
470 CALL SOUND(-800,-6,0,110,2,220,8) :: GOTO 550
480 CALL MOTION(#1,0,0) :: CALL HCHAR((SX+7)/8,(SY+7)/8,32) :: ON Z GOTO 490,500,510
490 FOR J=0 TO 30 STEP 2 :: CALL SOUND(-100,440,J,880,J) :: NEXT J :: GOTO 520
500 CALL SOUND(-80,1000,0,2000,0,4000,8) :: GOTO 520
510 CALL SOUND(-1000,800,0,400,0,200,0) :: CALL SOUND(-600,800,0,400,0,1600,0)
520 PZ=PZ-1 :: PT(I)=PT(I)+Z*LEV :: IF PZ<=0 THEN CALL DELSPRITE(ALL) :: GOTO 370 ELSE 430
530 CALL MOTION(#1,0,0) :: CALL SOUND(-800,-6,0,110,2,220,8) :: FOR J=0 TO 30 :: CALL SOUND(-1000,-6,J,110,J,220,J) :: NEXT J :: GOTO 550
540 CALL MOTION(#1,0,0) :: FOR J=880 TO 110 STEP-110 :: CALL SOUND(100,J,0,J+3,2,J*2,8) :: NEXT J
550 CALL DELSPRITE(ALL) :: NEXT I :: CALL DELSPRITE(ALL) :: CALL VCHAR(1,1,32,768)
560 CALL CHAR(96,"FF8080808080808080808080808080FFFF",99,"FF010101010101FF")
570 CALL CHAR(100,"FFFF010101010101FF818181818181818181818181818181FF808080808080FF")
580 CALL CHAR(104,"FF000000000000FF01010101010101FF80804040202010100808040402020101")
590 CALL CHAR(108,"01010202040408081010202040408080E0B08C838080808000000000C0E00C03")
600 CALL CHAR(112,"0000000F1F181818000000F0F8181818181818F8F00000001818181F0F")
610 CALL CHAR(116,"1818181818181818000000FFFF",120,"00CC33",64,"3C4299A1A199423C")
620 CALL COLOR(9,11,1,10,11,1,11,9,1,12,14,1) :: DISPLAY AT(2,2):"`b `d ee gh    `d jl gh gc":" ac `d ff gh    ai km gh no"
630 DISPLAY AT(6,2):"SCORE TABLE":" ";RPT$("x",11) :: FOR I=1 TO NP :: DISPLAY AT(8+I,2):USING "#  ==>  #####":I,PT(I) :: NEXT I
640 DISPLAY AT(17,2):USING "HIGHSCORE   #####":HS :: DISPLAY AT(18,2):RPT$("x",9)
650 DISPLAY AT(8,17):"puuuuuuuuuq" :: DISPLAY AT(9,17):"t @ 1984: t"
660 DISPLAY AT(10,17):"t*STARSOFTt" :: DISPLAY AT(11,17):"suuuuuuuuur"
670 DISPLAY AT(21,2):"NOCH EIN SPIEL?  J ODER N" :: DISPLAY AT(22,2):RPT$("x",15)
680 CALL MUSIC :: CALL KEY(0,K,T) :: K$=CHR$(K)
690 IF K$="J" OR K$="j" THEN 200
700 IF K$<>"N" AND K$<>"n" THEN 680
710 DISPLAY ERASE ALL :"(c) 1984 by *starsoft": : :"written by  Al Ertl": : : : :: STOP
720 ON ERROR 720 :: RETURN 390
730 !
740 CALL CHAR(96,"73FFFF7F3F7FFFFFC6FFFFF7FCFCF7FFFF7F7F3FFFFF7F63FFFFFEFEFEFFCF82")
750 CALL CHAR(100,"837FFFFFFFFFFFFFFFFFFFFFFFFFF1CFFF7F7F7FFFFFFFFFFFFFFCFEFEFEFFFF")
760 CALL CHAR(104,"0F3F7FFFFF3F1F03"&RPT$("F",16),136,"000000007EFFFFFF",112,"101010101010101010103C7E7EBD1824")
770 CALL COLOR(9,15,1,10,15,1,11,15,1,12,2,1,13,2,1,14,12,1)
780 RESTORE 1230 :: FOR J=2 TO 24 :: READ A$ :: DISPLAY AT(J,1):A$ :: NEXT J
790 FOR J=1 TO 14 :: READ X,Y :: DISPLAY AT(X,Y)SIZE(1):CHR$(136) :: NEXT J :: PZ=14
800 S0(1)=8 :: S0(2)=19 :: S0(3)=26
810 S(1)=8 :: S(2)=6 :: S(3)=9 :: D(1),D(2),D(3)=1 :: SZ=0
820 CALL HCHAR(8,8,113) :: CALL HCHAR(6,19,113) :: CALL HCHAR(9,26,113)
830 CALL SPRITE(#1,143,16,64,24) :: CALL SOUND(-1000,1000,0,500,0,2000,3) :: RETURN
840 CALL CHAR(96,"73FF7F7F7F7FFFFFC2EFFFFEFEFFFFFFFFFF7F7F3F7FFB41FFFEFCFCFEFFFFC2")
850 CALL CHAR(100,"C3EFFFFFFFFFFFFFFFFFFFFFFFFFFBD9010103030B0F0F0F0F1F1F1F1F1F1F1F")
860 CALL CHAR(104,"3F3F3F7F7F7F7FFF08181C1C3C3C3E7E7E7E7F7FFEFEFEFE"&RPT$("F",16))
870 CALL CHAR(108,"00008080C0C0C0C0C0E0E0F0F0F0E0E0F0F0F8F8F8FCFEFFFF7F7F3F3F1F1F0F")
880 CALL CHAR(112,"0F0F0707070703030303010101010101FFFFFF7E7E7E7E7E3E3E3C3C3C1C1818")
890 CALL CHAR(116,"FFFCFCF8F8F0F0F0E0E0E0E0E0C0C0C0808",136,"183C7EFFFF7E3C18",121,"387CFEBAFEFEFEAA")
900 CALL COLOR(9,15,1,10,15,1,11,15,1,14,10,1) :: RESTORE 1460 :: FOR J=2 TO 24 :: READ A$ :: DISPLAY AT(J,1):A$ :: NEXT J
910 FOR J=1 TO 7 :: READ X,Y :: DISPLAY AT(X,Y)SIZE(1):CHR$(136) :: NEXT J :: PZ=7
920 M(1),M(3)=LEV :: M(2),M(4)=-LEV :: CALL SPRITE(#2,121,12,200,33,M(1),0,#3,121,8,200,81,M(2),0)
930 CALL SPRITE(#4,121,4,200,137,M(3),0,#5,121,14,200,193,M(4),0) :: SZ=0 :: CALL SPRITE(#1,143,16,57,33) :: RETURN
940 CALL CHAR(96,"FFFFFFFFFFFFFF7C3EFFFFFFFFFFFFFF00000000EE481010"&RPT$("F",16),136,"3C7EFFFFFFFF7E3C")
950 CALL CHAR(104,"0101071F3F7DFCF8E081071F3E7E7EFCF8E0030F3F7E7FFDF9F10101030F3E7E")
960 CALL CHAR(108,"7CF870000001071F3E7EFCF8E0010101000000F0FCFCFEBE9F8F8080E0F8FCBE")
970 CALL CHAR(112,"9E8F8080F0FC3E0F0301F8FCFEFEBF8F878080808080E0F8F8FCBE9F87")
980 CALL CHAR(116,"E1F1F97D1E0E06E2E3F3FA7A3E1E06010101C1F8FCFE7F3F1F0F030180E0F979")
990 CALL CHAR(120,"3D3E1F0F060444E464747B3F1E060301000004040E1E7EFCF8C10306060E0E1E")
1000 CALL CHAR(124,"3C7CF880828286BEFEFEFCF8808002061E7EFCFC780002061EFCFCF87")
1010 CALL COLOR(9,15,1,10,3,1,11,3,1,12,3,1,14,11,1) :: RESTORE 1700 :: FOR J=2 TO 24 :: READ A$ :: DISPLAY AT(J,1):A$ :: NEXT J
1020 FOR J=1 TO 5 :: READ X,Y :: DISPLAY AT(X,Y)SIZE(1):CHR$(127) :: NEXT J
1030 FOR J=1 TO 15 :: READ X,Y :: DISPLAY AT(X,Y)SIZE(1):CHR$(136) :: NEXT J :: PZ=15
1040 CALL SPRITE(#2,98,8,200,150) :: MX,MY=0 :: CALL SPRITE(#1,143,16,81,33) :: RETURN
1050 !
1060 SZ=SZ+1 :: IF SZ>3 THEN SZ=1
1070 S(SZ)=S(SZ)+D(SZ) :: ON SZ GOTO 1080,1090,1100
1080 CALL GCHAR(S(SZ),8,P) :: GOTO 1110
1090 CALL GCHAR(S(SZ),19,P) :: GOTO 1110
1100 CALL GCHAR(S(SZ),26,P)
1110 IF P-32 AND P-112 THEN S(SZ)=S(SZ)-D(SZ) :: D(SZ)=-D(SZ) :: GOTO 1070
1120 IF D(SZ)=-1 THEN 1140
1130 CALL HCHAR(S(SZ)-1,S0(SZ),112) :: CALL HCHAR(S(SZ),S0(SZ),113) :: GOTO 1150
1140 CALL HCHAR(S(SZ)+1,S0(SZ),32) :: CALL HCHAR(S(SZ),S0(SZ),113)
1150 CALL SOUND(-5,-3,0) :: RETURN
1160 SZ=SZ+1 :: IF SZ>4 THEN SZ=1
1170 CALL SOUND(-4000,2000,16,4000,18) :: IF RND<.8 THEN RETURN
1180 M(SZ)=-M(SZ) :: CALL MOTION(#SZ+1,M(SZ),0) :: RETURN
1190 CALL SOUND(-6,1250,7,1254,17) :: CALL POSITION(#1,SX,SY,#2,GX,GY)
1200 IF RND<.9 THEN RETURN
1210 MX=LEV*SGN(SX-GX) :: MY=LEV*SGN(SY-GY) :: CALL MOTION(#2,MX,MY) :: RETURN
1220 !
1230 DATA "`dddddddddddddddddddddddddda"
1240 DATA "fiiiiiiiiiiiiiiiiiiiiiiiiiig"
1250 DATA "beeeeiif beec f fiig  fiiiig"
1260 DATA "     fig      g beec  fiiiig"
1270 DATA "     fig      f       fiiiig"
1280 DATA "  hdeeec    hec       fiig"
1290 DATA "                      beec",
1300 DATA "      `ddda"
1310 DATA "`dda  fiiig"
1320 DATA "fiig  beiiiddda  `ddddda"
1330 DATA "fiig    fiiiiig  fiiiiig"
1340 DATA "fiig    beeeeig  fiiiiig"
1350 DATA "fiig         fg  beeeiig"
1360 DATA "fiig   `dddddig      fig `da"
1370 DATA "fiig   fiiiiiig `ddddiig fig"
1380 DATA "fiec   fiiiiiig fiiiiiig beg"
1390 DATA "fg     fiieeeec fiiiiiig   g"
1400 DATA "fida   fig      fiiiiiig   f"
1410 DATA "fiig   fiiddddddiiiieeec   g"
1420 DATA "fiiidddiiiiiiiiiiiig       f"
1430 DATA "fiiiiiiiiiiiiiiiiiig       g"
1440 DATA "beeeeeeeeeeeeeeeeeeeeeeeeeec"
1450 DATA 6,4,6,13,9,9,10,4,11,14,11,19,15,8,15,27,16,17,16,20,19,3,20,14,21,6,23,24
1460 DATA "kkkkkkkkkkkkkkkkkkkkkkkkkkkk"
1470 DATA "kkkkkkkkkkkkkkkkkkkkeeekkkkk"
1480 DATA "beeeekkkeekkkkkkkkkk   okt"
1490 DATA "     okt  beekkkeeec   pku"
1500 DATA "     pku     okt       qkv"
1510 DATA "     qkv     pku        r"
1520 DATA "      r   i  qkv  i     s"
1530 DATA "      s   j   r   j"
1540 DATA "         fkl  s  fkl      i"
1550 DATA "         gkm     gkm      j"
1560 DATA "   i     hkn     hkn     fkl"
1570 DATA "   j   `dkkkdddddkkkdda  gkm"
1580 DATA "  fkl  kkkkkkkkkkkkkkkkddhkn"
1590 DATA "  hknddkkkkkkkkkkkkkkkkkkkkk"
1600 DATA "`kkkkkkkkkkkkkkkkkkkkkkkkkkk"
1610 DATA "kkkkkkkkkkkkkkkkkkkkkkkkkkkk"
1620 DATA "kkkkkkkkkkkkkkkkkkkkkkkkkkkk"
1630 DATA "kkkkkkkkkkkkkkkkkkkkkkkkkkkk"
1640 DATA "kkkkkkkkkkkkkkkkkkkkkkkkkkkk"
1650 DATA "kkkkkkkkkkkkkkkkkkkkkkkkkkkk"
1660 DATA "kkkkkkkkkkkkkkkkkkkkkkkkkkkk"
1670 DATA "kkkkkkkkkkkkkkkkkkkkkkkkkkkk"
1680 DATA "kkkkkkkkkkkkkkkkkkkkkkkkkkkk"
1690 DATA 11,4,10,7,7,11,11,15,7,19,9,25,9,27
1700 DATA "cccccccccccccccccccccccccccc"
1710 DATA "````````````````````````````"
1720 DATA "  hn     hn   hn  hn     hn"
1730 DATA "  io     io   io  io     io"
1740 DATA "  jp     jp   jp  jp     jp"
1750 DATA "  kq     kq   kq  kq     kq"
1760 DATA "  lr     lr   lr  lr     lr"
1770 DATA "  ms tz  ms   ms  ms     ms"
1780 DATA "     u{  hn       hn     hn"
1790 DATA "     v|  io       io     io"
1800 DATA "     w}  jp       jp     jp"
1810 DATA "     x~  kq       kq     kq"
1820 DATA "     y   lr       lr     lr"
1830 DATA "tz   tz  ms  tz   ms  tz ms"
1840 DATA "u{   u{      u{       u{"
1850 DATA "v|   v|      v|       v|"
1860 DATA "w}   w}      w}       w}"
1870 DATA "x~   x~      x~       x~"
1880 DATA "y    y       y        y"
1890 DATA "aaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1900 DATA "cccccccccccccccccccccccccccc"
1910 DATA "cccccccccccccccccccccccccccc"
1920 DATA "cccccccccccccccccccccccccccc"
1930 DATA 14,7,20,2,20,7,20,15,20,24
1940 DATA 4,2,4,6,4,9,4,13,4,18,4,22,4,24,20,4,20,9,20,12,20,16,20,19,20,21,20,25,20,28
1950 DATA " xx  x  x x xxx xx  xxx"
1960 DATA "x   x x x x x   x x x x"
1970 DATA "x   x x x x xx  xx  x x"
1980 DATA "x   xxx xxx x   xx  x x"
1990 DATA " xx x x  x  xxx x x x x"
2000 DATA "iiliiiiiiiiliiiiii"
2010 DATA "iiiiiiiiiiiiiliiii"
2020 DATA "iliiiiliiiiliiiili"
2030 DATA "iiiiiiiiiiiiiiiiii"
2040 DATA "iiiliigbcdefiiliii"
2050 DATA "iiiiii`aaaahiiiiii"
2060 DATA "iiiiiiaaaaaailiili"
2070 DATA "iliiijiiiiiikiiiii"
2080 DATA 25,392,25,392,25,392,25,392,12,370,12,440,75,392,12,392,12,392,25,440,50,523,12,440,12,523
2090 DATA 62,392,12,392,12,523,12,587,25,659,50,659,12,587,12,659,25,698,25,659,25,587,25,523,25,494
2100 DATA 75,587,50,2E4,25,523,25,659,25,784,25,784,25,784,25,784,25,698,25,659,25,587,25,523,25,2E4
2110 DATA 12,523,12,523,25,494,25,523,25,587,25,523,25,494,12,440,12,440,25,392,25,392,25,523,25,523
2120 DATA 25,587,25,587,25,523,25,494,100,523,50,2E4,25,523,25,659,50,784,25,784,25,659,25,740,50,659
2130 DATA 12,659,12,587,25,587,50,523,25,440,25,392,25,392,25,523,25,523,25,587,25,587,25,523,25,494
2140 DATA 150,523,100,2E4,0,0
2150 !
2160 SUB JOY(N,X,Y)
2170 CALL JOYST(N,X,Y) :: IF X OR Y THEN SUBEXIT
2180 CALL KEY(0,K,S) :: IF NOT S THEN SUBEXIT ELSE K$=CHR$(K)
2190 IF K$="E" OR K$="e" THEN Y=4 :: SUBEXIT
2200 IF K$="X" OR K$="x" THEN Y=-4 :: SUBEXIT
2210 IF K$="D" OR K$="d" THEN X=4 :: SUBEXIT
2220 IF K$="S" OR K$="s" THEN X=-4 :: SUBEXIT
2230 IF K$="R" OR K$="r" THEN X,Y=4 :: SUBEXIT
2240 IF K$="W" OR K$="w" THEN X=-4 :: Y=4 :: SUBEXIT
2250 IF K$="Z" OR K$="z" THEN X,Y=-4 :: SUBEXIT
2260 IF K$="C" OR K$="c" THEN X=4 :: Y=-1
2270 SUBEND
2280 SUB TITLE
2290 CALL CLEAR :: CALL SCREEN(2) :: FOR I=1 TO 8 :: CALL COLOR(I,16,1) :: NEXT I
2300 CALL CHAR(96,"070F1F3F3F7F7F7FFFFFFFFFFFFFFFFF0001071F7FFFFFFF7FFFFFFFFFFFFFFF")
2310 CALL CHAR(100,"FEFFFFFFFFFFFFFF0080E0F8FEFFFFFF00000000000080C00000000000000103")
2320 CALL CHAR(104,"E0F0F8FCFCFEFEFE0",112,"FF",113,"00000000000000FF0101010101010101808080808080808")
2330 CALL CHAR(106,"0102040810204080804020100804020100000408")
2340 X=1.5 :: Y=2 :: FOR I=1 TO 10 :: X=X+.5 :: Y=Y+1 :: CALL SPRITE(#I,ASC(SEG$("THE CAVERN",I,1)),ASC(SEG$("MCDAJIGNFH",I,1))-64,X*8-7,Y*8-7) :: NEXT I
2350 FOR I=3 TO 26 STEP 23 :: FOR J=1 TO 8 :: DISPLAY AT(7+J,I):SEG$("TI-99/4A",J,1) :: NEXT J :: NEXT I
2360 DISPLAY AT(19,1):"(C) 1984 BY *STARSOFT": :"WRITTEN BY ALWIN ERTL": : :"TASTE STARTET..."
2370 CALL HCHAR(7,8,113,18) :: CALL HCHAR(16,8,112,18) :: CALL VCHAR(8,7,114,8) :: CALL VCHAR(8,26,115,8)
2380 RESTORE 2000 :: FOR I=1 TO 8 :: READ A$ :: DISPLAY AT(7+I,6)SIZE(18):A$ :: NEXT I
2390 FOR I=10 TO 1 STEP-1 :: CALL MOTION(#I,0,5) :: NEXT I
2400 CALL COLOR(9,2,15,10,2,15,11,11,1)
2410 CALL MUSIC :: CALL DELSPRITE(ALL) :: SUBEND
2420 SUB MUSIC
2430 RESTORE 2080
2440 CALL KEY(0,K,S) :: IF S THEN SUBEXIT
2450 READ L,F :: IF L=0 THEN 2430
2460 CALL SOUND(L*10,F,0,F+3,4,F*2,9) :: GOTO 2440
2470 SUBEND
